package com.example.demo_mvp.base.presenter;

import java.lang.ref.WeakReference;

import io.reactivex.disposables.CompositeDisposable;

/**
 * @author yaotianxue
 * @description 解决内存泄漏问题：使用弱引用
 * @date 2025/1/9
 */
public class BasePresenter<V> implements IBasePresenter {
    //强：不回收 软:内存不足才回收 弱：gc一来就会回收 虚
    WeakReference<V> mWeakReference;

    //每个请求 都会产生订阅->把订阅做一个统一的管理
    //将rxjava的 订阅 添加到mCompositeDisposable 通过mCompositeDisposable 对订阅的请求做统一的管理
    protected CompositeDisposable mCompositeDisposable = new CompositeDisposable();

    /**
     * 绑定view
     * @param view
     */
    public void attachView(V view) {
        mWeakReference = new WeakReference<>(view);
    }

    /**
     * 解绑view
     */
    public void detachView() {
        if (mWeakReference != null) {
            mWeakReference.clear();
            mWeakReference = null;
        }
        //取消网络订阅
        mCompositeDisposable.clear();
    }

    /**
     * 获得view
     * @return
     */
    public V getView() {
        return mWeakReference == null ? null : mWeakReference.get();
    }

    /**
     * 判断是否绑定
     * @return
     */
    protected boolean isViewAttached(){
        return mWeakReference != null && mWeakReference.get() !=null;
    }


    @Override
    public void destroy() {

    }
}
